package com.tdd.client;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;

/**
 * @author xiaoxiyuan
 * @description 客户端
 * @date 2020-06-11 15:16:40
 */
public class MyClient {

    public static void main(String[] args)  throws  Exception{

        //客户端工作线程组
        EventLoopGroup group = new NioEventLoopGroup();

        try {
            //客户端启动器
            Bootstrap bootstrap = new Bootstrap();
            //调用group方法，传入工作线程组
            bootstrap.group(group)
                    //channel方法传入NioSocketChannel的class对象，根据这个传入的class创建客户端的Channel对象
                    .channel(NioSocketChannel.class)
                    //childHandler方法传入一个handler，当将信息发送到服务端时这个handler被执行，即供SocketChannel使用
                    .handler(new MyClientInitializer());
            //利用connect方法进行服务端连接
            ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", 8000).sync();
            System.out.println("客户端连接成功！");
            //等待服务端链路关闭之后main函数退出
            channelFuture.channel().closeFuture().sync();

        }finally {
            //优雅的关闭当前的线程池，释放线程资源
            group.shutdownGracefully();
        }
    }
}
